1、非阻塞 IO
	当设备资源不可用时驱动立即返回，错误码通常是 -EAGAIN(表示资源不可用)，当文件采用非阻塞式方式打开后 struct
file 的 f_flags 成员的 O_NONBLOCK 标志会置位。
2、阻塞 IO
	当设备资源不可用时驱动将当前进程挂起，直到资源可用，通常采用等待队列来实现挂起操作，也可采用信号量阻塞，
但是为了方便多路复用IO的开发，通常选择等待队列，系统默认采用阻塞式打开文件。
3、等待队列
	//等待队列
	struct wait_queue_head
	//初始化等待队列
	init_waitqueue_head(q)
	//定义并初始化等待队列
	DECLARE_WAIT_QUEUE_HEAD(name)
	
	//条件condition不成立则将当前进程加入等待队列并休眠，不可被信号唤醒
	//timeout表示具有超时属性
	//interruptible表示可以被信号唤醒
	//exclusive表示具有排他性，默认唤醒队列中的使用进程，但是采用排他性休眠的在唤醒它后不会继续唤醒其他进程
	//locked表示操作队列前先获得内部的锁
	//irq表示在操作队列时要关闭中断
	wait_event(wq, condition)
	wait_event_timeout(wq, condition, timeout)
	wait_event_interruptible(wq, condition)
	wait_event_interruptible_timeout(wq, condition, timeout)
	wait_event_interruptible_exclusive(wq, condition)
	wait_event_interruptible_locked(wq, condition)
	wait_event_interruptible_locked_irq(wq, condition)
	wait_event_interruptible_exclusive_locked(wq, condition)
	wait_event_interruptible_exclusive_locked_irq(wq, condition)
	
	//从等待队列中唤醒
	//与wait_event或wait_event_timeout配合使用
	wake_up(x)
	//与wait_event_interruptible、wait_event_interruptible_timeout和
	//wait_event_interruptible_exclusive配合使用
	wake_up_interruptible(x)
	//与wait_event_interruptible_locked、wait_event_interruptible_locked_irq、
	//wait_event_interruptible_exclusive_locked和wait_event_interruptible_exclusive_locked_irq配合使用
	wake_up_locked(x)

